package modelo.persistir;

import java.util.ArrayList;

import modelo.centrales.CentralElectrica;
import modelo.centrales.CentralEolica;
import modelo.mapa.Ubicacion;
import modelo.servicios.RedElectrica;

import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;

public class CentralPersistir {
	public static JsonObject persistir(ArrayList elems){
		Gson gson = new Gson();
		JsonObject jObject=new JsonObject();
		 jObject.addProperty("Vida" ,(int) elems.get(0));
		 jObject.addProperty("Capacidad De Abastecimiento" , (int) elems.get(1));
		 ArrayList<RedElectrica> redes=(ArrayList<RedElectrica>)elems.get(2);
		 jObject.add("Redes Electricas", RedElectricaPersistir.persistirArray(redes));
		 Ubicacion ubi = (Ubicacion)elems.get(3);
		 JsonObject aa=UbicacionPersistir.persistir(ubi.obtenerDatosPersistibles());
		 jObject.add("Ubicacion",aa );
		 return jObject;

	}

	public static JsonElement persistirArray(ArrayList listadoCentrales)
	{
		Gson gson = new Gson();
		JsonObject jObject=new JsonObject();
		JsonArray jArray=new JsonArray();		
		ArrayList<CentralElectrica> listado=(ArrayList<CentralElectrica>)listadoCentrales;
		for(CentralElectrica cent:listado)
		{
			jArray.add(CentralPersistir.persistir(cent.obtenerDatosPersistibles()));			
		}
		return jArray;
	}

	public static ArrayList cargar(String comp)
	{
		ArrayList lista=new ArrayList();
		JsonParser parser = new JsonParser();
		JsonObject carg = parser.parse(comp).getAsJsonObject();		
		lista.add(carg.get("Vida").getAsInt());
		lista.add(carg.get("Capacidad De Abastecimiento").getAsInt());
		String redesElectricas=carg.get("Redes Electricas").toString();
		ArrayList redesElectricasArray = RedElectricaPersistir.cargarArray(redesElectricas);
		lista.add(redesElectricasArray);
		String ubi=carg.get("Ubicacion").toString();
		ArrayList ubicacion = UbicacionPersistir.cargar(ubi);
		Ubicacion ubicacionFin=new Ubicacion(0,0);
		ubicacionFin.poblar(ubicacion);
		lista.add(ubicacionFin);
		return lista;
	}
}